package v1

import (
	"devops-super/api"
	"github.com/gogf/gf/v2/frame/g"
)

// IotDataGetPageLstReq 分页获取物联网数据请求
type IotDataGetPageLstReq struct {
	g.Meta `method:"get" path:"/iotdata/page-list"`
	*api.PageLstReq
	DistributeTableId int      `json:"distributeTableId"` //分布式表id主键
	TimeType          int      `json:"timeType"`          // 0-时间段 1-最近时间
	TimeRange         []string `json:"timeRange"`         // 时间范围[开始,结束] 当TimeType=0时，按时间段去获取
	Recent            int      `json:"recent"`            // 最近秒数 当TimeType=1时，按最近秒数去获取
	DeviceNos         []string `json:"deviceNos"`         // 设备编号数组
}

// IotDataGetPageLstRes 分页获取物联网数据响应
type IotDataGetPageLstRes struct {
	*api.PageLstRes[any]
}

type IotDataSummaryPageLstReq struct {
	g.Meta `method:"get" path:"/iotdata/summary-page-list"`
	*api.PageLstReq
	DistributeTableId int      `json:"distributeTableId"` //分布式表id主键
	TimeType          int      `json:"timeType"`          // 0-时间段 1-最近时间
	TimeRange         []string `json:"timeRange"`         // 时间范围[开始,结束] 当TimeType=0时，按时间段去获取
	Recent            int      `json:"recent"`            // 最近秒数 当TimeType=1时，按最近秒数去获取
	DeviceNos         []string `json:"deviceNos"`         // 设备编号数组
	Dimension         int      `json:"dimension"`         // 2d 还是 3d ，值：2或3
	XAxisParam        string   `json:"xAxisParam"`        // X轴参数
	YAxisParam        string   `json:"yAxisParam"`        // y轴参数
	ZAxisParam        string   `json:"zAxisParam"`        // z轴参数
	XFilterMode       string   `json:"xFilterMode"`       // X轴过滤方式：auto(自动), custom(自定义)
	YFilterMode       string   `json:"yFilterMode"`       // Y轴过滤方式：auto(自动), custom(自定义)
	ZFilterMode       string   `json:"zFilterMode"`       // z轴过滤方式：auto(自动), custom(自定义)
	XMin              int      `json:"xMin"`              // X轴最小值
	XMax              int      `json:"xMax"`              // X轴最大值
	YMin              int      `json:"yMin"`              // Y轴最小值
	YMax              int      `json:"yMax"`              // Y轴最大值
	ZMin              int      `json:"zMin"`              // z轴最小值
	ZMax              int      `json:"zMax"`              // z轴最大值
}

// IotDataSummaryPageLstRes 分页获取物联网统计数据响应
type IotDataSummaryPageLstRes struct {
	*api.PageLstRes[any]
}

// IotDataGetOneReq 获取单条物联网数据请求
type IotDataGetOneReq struct {
	g.Meta     `method:"get" path:"/iotdata/getOne" summary:"获取单条物联网数据" tags:"物联网数据"`
	Sampletime int64  `json:"sampletime" v:"required#采样时间不能为空"` // 采样时间
	DeviceNo   string `json:"deviceNo" v:"required#设备编号不能为空"`   // 设备编号
}

// IotDataGetOneRes 获取单条物联网数据响应
type IotDataGetOneRes struct {
	Sampletime int64  `json:"sampletime" ` // 采样时间
	DeviceNo   string `json:"deviceNo"`    // 设备编号
	Data       any    `json:"data"`
}

// IotDataGetOneWaveReq 获取单条物联网波形请求
type IotDataGetOneWaveReq struct {
	g.Meta     `method:"get" path:"/iotdata/getOneWave" summary:"获取单条物联网波形" tags:"物联网数据"`
	Sampletime int64  `json:"sampletime" v:"required#采样时间不能为空"` // 采样时间
	PageFlag   int    `json:"pageFlag"`                         // 0当前 1下一个 -1上一个
	DeviceNo   string `json:"deviceNo" v:"required#设备编号不能为空"`   // 设备编号
	Type       string `json:"type"`                             // ae,vi
	Domain     int    `json:"domain"`
	Direction  int    `json:"direction"` // 0x 1y 2z 如果为-1 则默认按0算
}

// IotDataGetOneWaveRes 获取单条物联网波形返回
type IotDataGetOneWaveRes struct {
	Data any    `json:"data"`
	Wave string `json:"wave"`
}

// IotDataGetRealtimeWaveReq 获取实时物联网波形
type IotDataGetRealtimeWaveReq struct {
	g.Meta    `method:"get" path:"/iotdata/getRealtimeWave" summary:"获取实时物联网波形" tags:"物联网数据"`
	DeviceNo  string `json:"deviceNo" v:"required#设备编号不能为空"` // 设备编号
	Type      string `json:"type"`                           // ae,vi
	Domain    int    `json:"domain"`
	Direction int    `json:"direction"` // 0x 1y 2z 如果为-1 则默认按0算
}

// IotDataGetRealtimeWaveRes 获取实时物联网波形返回
type IotDataGetRealtimeWaveRes struct {
	Data any    `json:"data"`
	Wave string `json:"wave"`
}

// IotDataDelReq 删除物联网数据请求
type IotDataDelReq struct {
	g.Meta     `method:"delete" path:"/iotdata/delete" summary:"删除物联网数据" tags:"物联网数据"`
	DeleteType int `d:"0" json:"deleteType"` // 删除类型 0-按ID删除 1-按设备+时间删除
	// IotDataDelReq 补充字段校验标签
	Ids       []int    `json:"ids" v:"required-if:DeleteType,0|min-length:1#ID列表不能为空"`
	DeviceNos []string `json:"deviceNos" v:"required-if:DeleteType,1|min-length:1#设备列表不能为空"`
	TimeType  int      `json:"timeType" v:"required-if:DeleteType,1"`
	TimeRange []string `json:"timeRange" v:"required-if:DeleteType,1,TimeType,0"`
	Recent    int      `json:"recent" v:"required-if:DeleteType,1,TimeType,1"`
}

// IotDataDelRes 删除物联网数据响应
type IotDataDelRes struct{}
